/*
 * 多媒体
 * 多媒体包括视频、图片等信息
 * @author      zhul
 * @createdate  2017-04-24
 */

if (typeof BusMedia !== 'object') {
    var BusMedia = {};
}

(function (window, undefined) {

    /**
     * 媒体区初始化
     * @param regionCode
     */
    BusMedia.init = function (config) {

        this.params = {};
        this.params.video = {domid: ''};
        this.params.image = {domid: ''};
        this.params.live = {domid: ''};
        this.params.isshowcontrol = false;
        // 视频区域
        BusMedia.params.regioncode = config.regioncode;
        // 视频控件ID
        BusMedia.params.video.domid = config.videodomid;
        // 图片控件ID
        BusMedia.params.image.domid = config.imagedomid;
        // 直播控件ID
        BusMedia.params.live.domid = config.livedomid;
        // 是否显示播放控制进度条
        BusMedia.params.isshowcontrol = config.isshowcontrol;
        // 资源集合(视频、图片或其他资源集合)
        BusMedia.params.resources = [];
        // 直播流资源
        BusMedia.params.lives = null;
        // 视频资源
        BusMedia.params.videos = [];
        // 图片资源
        BusMedia.params.images = [];
        // 视频区宽高
        BusMedia.params.width = "100%";
        BusMedia.params.height = "200px";
        // 加载资源
        BusMedia.loadresource();
    };

    /**
     * 加载视频资源
     */
    BusMedia.loadresource = function () {

        var data = null;
        if (mediajson != null && mediajson.length > 0) {

            // 筛选本区域数据
            for (var i = 0; i < mediajson.length; i++) {
                if (BusMedia.params.regioncode == mediajson[i].regioncode) {
                    data = mediajson[i];
                    break;
                }
            }

            if (data != null && data.resources != null && data.resources.length > 0) {
                BusMedia.params.resources = data.resources;

                for (var i = 0; i < data.resources.length; i++) {

                    // 筛选直播流资源
                    if (data.resources[i].type == "live") {
                        BusMedia.params.lives = data.resources[i].data;
                    }
                    // 筛选视频资源
                    if (data.resources[i].type == "video") {
                        BusMedia.params.videos.push(data.resources[i].data);
                    }
                    // 筛选图片资源
                    if (data.resources[i].type == "image") {
                        BusMedia.params.images.push(data.resources[i].data);
                    }
                }
            }
        }
        else {
            console.log('媒体资源无效');
        }

    }

    /**
     * 播放资源
     */
    var timerInterval = null;
    BusMedia.play = function () {


        if (BusMedia.params.lives == null) {
            // 轮播播放
            BusMedia.cyclicPlay();

        }
        else {
            console.log('开始播放直播流');
            /*
             *  1. 判断轮播资源是否在序列值比插播前
             *  2. 存在则先放轮播
             *  2.1 存在插播，则轮播过程中播放插播
             *  2.2 不存在插播，则轮播结束回到直播流逻辑
             *  3. 不存在，则直接进入直播流逻辑
             *  4. 直播播放中到点则播放插播视频
             */
            BusMedia.livePlay();
        }

        // 定时插播
        timerInterval = setInterval(BusMedia.interPlay, 1000);

    }

    /**
     * 直播流播放
     */
    BusMedia.livePlay = function () {
        $('#' + BusMedia.params.image.domid).hide();
        $('#' + BusMedia.params.video.domid).hide();
        $('#' + BusMedia.params.live.domid).show();

        if (BusMedia.params.resources != null) {
            if (BusMedia.params.resources.length > 1) {
                if (BusMedia.params.resources[1].type == "video" && BusMedia.params.resources[1].data.videotype == 0) {
                    console.log('开始轮播...');
                    // 轮播播放
                    BusMedia.cyclicPlay();
                }
                else {
                    playLive();
                }
            }
            else {
                playLive();
            }
        }
        else {
            playLive();
        }
        // playLive();
        function playLive() {
            var url = BusMedia.params.lives.url;
            console.log('直播流地址', url);
            console.log(BusMedia.params.live.domid);
            console.log($('#' + BusMedia.params.live.domid).length);
            $('#' + BusMedia.params.live.domid).find("iframe").first().attr("src", url + "?width=1080&height=480");

        }

    }

    /**
     * 循环播放
     */
    var handlerCyc = null;
    var handlerInt = null;
    var timerInt = null;
    var timestep = 0;
    // 视频播放索引
    var current = 0;
    // 剩余播放次数
    var lastPlayCount = -1;
    BusMedia.cyclicPlay = function () {

        if (BusMedia.params.resources != null) {
            // 根据orderindex排序媒体资源
            var sortJson = JsonSort(BusMedia.params.resources, "orderindex");
            // 新媒体对象集
            var newres = [];
            // 筛选出轮播和图片
            var orderindex = 0;
            for (var i = 0; i < sortJson.length; i++) {
                if (sortJson[i].type == "video" || sortJson[i].type == "image") {
                    if (sortJson[i].data.videotype == 0
                        || sortJson[i].data.videotype == undefined
                        || sortJson[i].data.videotype == null
                        || sortJson[i].data.videotype == "") {

                        // 创建新json对象
                        sortJson[i].data.type = sortJson[i].data.videotype == 0 ? 'video' : 'image';
                        sortJson[i].data.orderindex = orderindex++;
                        newres.push(sortJson[i].data);
                    }
                }
            }

            // console.log(newres);
            if (newres != null && newres.length > 0) {
                // 注册视频控件播放结束事件
                var video = document.getElementById(BusMedia.params.video.domid);
                var image = document.getElementById(BusMedia.params.image.domid);
                // 缩放视频区高度
                // var videoheight = $(video).width() * 9 / 16;
                // $(video).height(videoheight);

                // 视频结束时间注册
                if (handlerInt != null)
                    video.removeEventListener('ended', handlerInt);
                handlerCyc = function () {
                    console.log('视频播放结束...');
                    if (lastPlayCount <= 0) {
                        // 播放索引自增
                        current++;

                        if (current >= newres.length) {

                            if (BusMedia.params.lives == null) {
                                console.log('重新循环播放');
                                current = 0; //重新循环播放
                            }
                            else {
                                console.log('继续直播流');
                                BusMedia.livePlay(); // 继续直播流
                                return;
                            }
                        }
                        lastPlayCount = -1;
                    }
                    play(newres);
                };
                video.addEventListener('ended', handlerCyc);

                play(newres);


                function play(newres) {
                    console.log('要开始轮播了！！！');

                    if (newres[current] == null) {
                        console.log('BusMedia.params.live', BusMedia.params.lives);
                        return;
                    }

                    if (lastPlayCount == -1) {
                        if (newres[current].playcount === undefined) {
                            lastPlayCount = -1
                        }
                        else {
                            lastPlayCount = newres[current].playcount;
                        }
                    }

                    console.log('newres[current]', newres[current]);
                    if (newres[current].type == "video") {
                        if (BusMedia.params.live != null) {
                            $('#' + BusMedia.params.live.domid).hide();
                        }
                        $('#' + BusMedia.params.image.domid).hide();
                        $('#' + BusMedia.params.video.domid).show();
                        //video.currentTime = 30;
                        console.log('轮播地址', newres[current].localpath);
                        video.src = newres[current].localpath;
                        // video.load();
                        video.play();
                        lastPlayCount--;
                    }

                    if (newres[current].type == "image") {
                        $('#' + BusMedia.params.video.domid).hide();
                        $('#' + BusMedia.params.image.domid).animate({
                            opacity: 'toggle'
                        }, "slow");
                        //$('#' + BusMedia.params.image.domid).show("slow");
                        $('#' + BusMedia.params.image.domid).css("background-image", "url(" + newres[current].localpath + ")");
                        $('#' + BusMedia.params.image.domid).height($(video).height());
                        // 开始图片倒计时
                        timestep = 0;
                        timerInt = setInterval(timego, 1000);
                        console.log('图片播放结束...');
                    }

                    console.log('当前播放序列', current, lastPlayCount);

                }

                function timego() {
                    //console.log('图片播放倒计时' + timestep);
                    timestep++;
                    if (timestep >= 3) {
                        timestep = 0;
                        //console.log(timerInt);
                        if (timerInt != null) {
                            $('#' + BusMedia.params.image.domid).animate({
                                opacity: 'toggle'
                            }, "slow", null, function () {
                                clearInterval(timerInt);
                                // 播放索引自增
                                current++;
                                play(newres);
                            });

                        }
                    }
                }

                // for (var i = 0; i < newres.length; i++) {
                //
                // }
            }
        }


    }

    /**
     * 插播
     */
    BusMedia.interPlay = function () {
        console.log('定时检查插播');
        // 新媒体插播对象集
        var newres = [];
        var jsondata = BusMedia.params.resources;

        // 筛选出插播视频
        for (var i = 0; i < jsondata.length; i++) {
            //console.log(jsondata[i].data.videotype);
            if (jsondata[i].data.videotype != "undefined"
                && jsondata[i].data.videotype != null
                && jsondata[i].data.videotype != ""
                && jsondata[i].data.videotype == 1) {
                newres.push(jsondata[i].data);
            }
        }

        if (newres != null && newres.length > 0) {

            // 注册视频控件播放结束事件
            var video = document.getElementById(BusMedia.params.video.domid);
            // 缩放视频区高度
            // var videoheight = $(video).width() * 9 / 16;
            // $(video).height(videoheight);

            // 如果只有一个资源，则循环播放插播视频
            if (BusMedia.params.resources != null && BusMedia.params.resources.length == 1) {
                // 停止插播定时器
                if (timerInterval != null) {
                    clearInterval(timerInterval);
                }
                video.src = newres[0].localpath;
                //video.load();
                video.loop = true;
                video.play();
            }
            else {
                var tempTimer = null;
                var tempRes = null;
                var comparetime = getCurrentTime();
                for (var i = 0; i < newres.length; i++) {
                    // 筛选出当前时间点位于插播时间段内的视频
                    if (newres[i].start <= comparetime && comparetime < newres[i].end) {
                        console.log('开始循环插播。。。');
                        var lastPlayCount = -1;
                        tempRes = newres[i];
                        // 停止插播定时器
                        if (timerInterval != null) {
                            clearInterval(timerInterval);
                        }

                        // 注册视频结束事件
                        if (handlerCyc != null)
                            video.removeEventListener('ended', handlerCyc);
                        handlerInt = function () {
                            console.log('插播结束');

                            if (lastPlayCount > 0) {
                                playInt(video, tempRes);
                            }
                            else {
                                // 继续轮播
                                goPlayCyc();
                            }
                        };
                        video.addEventListener('ended', handlerInt);

                        playInt(video, newres[i], lastPlayCount);

                        // 启动插播时间结束侦听计时器
                        // tempTimer = setInterval(goPlayCyc, 1000);
                        break;
                    }
                }
            }
        }

        function playInt(video, res, lpc) {
            $('#' + BusMedia.params.live.domid).hide();
            $('#' + BusMedia.params.image.domid).hide();
            $('#' + BusMedia.params.video.domid).show();
            // console.log('判断是否继续插播视频播放');
            // var comparetime = getCurrentTime();
            //
            // if (res.start <= comparetime && comparetime < res.end) {
            //     // 开始播放插播视频
            //     video.src = res.localpath;
            //     //video.load();
            //     video.play();
            // }

            // 开始播放插播视频
            video.src = res.localpath;
            //video.load();
            video.play();
            lpc--;
        }

        function goPlayCyc() {
            //var comparetime = getCurrentTime();
            // console.log('插播时间侦听', comparetime, tempRes.start);
            //if (tempTimer != null && tempRes != null) {
            // if (tempRes != null) {
            //if (!(tempRes.start <= comparetime && tempRes.end >= comparetime)) {
            // clearInterval(tempTimer);
            // 继续轮播
            BusMedia.cyclicPlay();
            // 定时插播
            timerInterval = setInterval(BusMedia.interPlay, 1000);
            //}
            // }
            //}
        }

        function getCurrentTime() {
            var date = new Date();
            var hour = date.getHours() < 10 ? ("0" + date.getHours()) : date.getHours();
            var minute = date.getMinutes() < 10 ? ("0" + date.getMinutes()) : date.getMinutes();
            return hour + ":" + minute;
        }
    }

    /*
     @function     JsonSort 对json排序
     @param        json     用来排序的json
     @param        key      排序的键值
     */
    function JsonSort(json, key) {
        //console.log(json);
        for (var j = 1, jl = json.length; j < jl; j++) {
            var temp = json[j],
                val = temp[key],
                i = j - 1;
            while (i >= 0 && json[i][key] > val) {
                json[i + 1] = json[i];
                i = i - 1;
            }
            json[i + 1] = temp;

        }
        //console.log(json);
        return json;
    }
})(window);


